package main

import (
	"fmt"
	"strconv"
)

/*
title 汇总区间

给定一个无重复元素的有序整数数组 nums 。
返回恰好覆盖数组中所有数字的最小有序区间范围列表。
也就是说，nums 的每个元素都恰好被某个区间范围所覆盖，并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出：
"a->b" ，如果 a != b
"a" ，如果 a == b

示例 1：
输入：nums = [0,1,2,4,5,7]
输出：["0->2","4->5","7"]
解释：区间范围是：
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

示例 2：
输入：nums = []
输出：[]
 */
func summaryRanges(nums []int) []string {
	if len(nums) == 0{
		return []string{}
	}
	if len(nums) == 1{
		return []string{strconv.Itoa(nums[0])}
	}
	nums = append(nums, 0)
	l := len(nums)
	var res []string
	// fmt.Printf("%v %v\n", len(res), cap(res))
	left, right := 0, 1 // left用于判断起始位置元素，right不断地向移动
	for right < l{
		if nums[right] - nums[right - 1] != 1 {  // 说明已经不是连续的数字了
			if nums[left] == nums[right - 1] {  // a == b 的情况
				res = append(res, strconv.Itoa(nums[left]))
				/*
				移动left指针
				 */
				left = right
				right ++
			}else { // a != b 的情况
				temp := strconv.Itoa(nums[left]) + "->" + strconv.Itoa(nums[right - 1])
				res = append(res, temp)
				/*
					移动left指针
				*/
				left = right
				right ++
			}
		} else {
			right ++  // 是连续的，right指针右移
		}
	}
	return res
}

func main() {
	fmt.Println(summaryRanges([]int{0,2,3,4,6,8,9}))
}
